package shorturl;

import shorturl.base.IShorterEntity;

/**
 * 短链接存储器父接口
 * 所有短链接存储器都要实现此接口
 *
 * 可以实现此接口制作自己的短链接存储器
 */
public interface IShorterStorage {

    /**
     * 根据短链接字符串获取对应的原始链接
     * @param shorterString 短链接字符串
     * @return
     */
    default String get(String shorterString){
        return get(shorterString, null);
    }

    /**
     * 根据短链接字符串和密钥获取对应的原始链接
     * @param shorterString 短链接字符串
     * @param password 密钥 (带密钥的短链接使用) 为 null代表没有密钥
     * @return
     */
    String get(String shorterString, String password);

    /**
     * 根据原始链接清除对应的短链接
     * 不建议使用 因为根据具体的存储方式不同 一个URL可能会对应多个短链接
     * @param url 原始链接
     */
    void clean(String url);

    /**
     * 根据短链接字符串清除对应的短链接
     * @param shorterString 短链接字符串
     */
    void cleanShorterString(String shorterString);

    /**
     * 保存短链接
     * @param url 原始链接
     * @param shorter 短链接实体类对象
     */
    void save(String url, IShorterEntity shorter);

    /**
     * 清除全部短链接
     */
    void clean();

    /**
     * 短链接是否已存在
     * @return
     */
    boolean hasShorterString(String shorterString);

}
